

const {ccclass, property} = cc._decorator;

@ccclass
export default class player extends cc.Component {
//路径
path:number[][]=[];
// 路径索引
step:number=1;
// 当前位置
x:number=1;
y:number=1;
// 目的地
end_x:number=null;
end_y:number=null;
// 当前动作
cur:cc.Tween=null;
// 移动速度
speed:number=1;



walk_correct(){
    // 绘制路径
    let graphcis=cc.find('Canvas/draw').getComponent(cc.Graphics);
    graphcis.clear();
    graphcis.moveTo(-370+(this.path[0][0]-1)*50,150-(this.path[0][1]-1)*50);
    for(let i=1;i<this.path.length;i++){
        graphcis.lineTo(-370+(this.path[i][0]-1)*50,150-(this.path[i][1]-1)*50)
    }
    graphcis.stroke();
    // 重置移动步数
    this.step=1;
    let distance=Math.abs(this.node.x-(this.path[this.step][0]-1)*50+375)+Math.abs(this.node.y+(this.path[this.step][1]-1)*50-150);
    // 如果当前节点坐标与下一个点的x,y位置绝对值等于50，则直接调用walk
    if(distance==50){
        this.walk();
    }// 如果当前节点坐标与下一个点的x,y位置绝对值大于50，则先移动至第一个节点,然后调用walk
    else if(distance>50){
        this.cur=cc.tween(this.node).to((0.5/this.speed)*(distance-50)/50,{x:-375+(this.path[0][0]-1)*50,y:150-(this.path[0][1]-1)*50}).call(this.walk,this).start();

    }// 如果当前节点坐标与下一个点的x,y位置绝对值小于50，则先按照距离计算移动时间，执行移动，移动后step加1，再调用walk
    else{
        this.cur=cc.tween(this.node).to((0.5/this.speed)*distance/50,{x:-375+(this.path[1][0]-1)*50,y:150-(this.path[1][1]-1)*50}).call(()=>{this.step=this.step+1}).call(this.walk,this).start();


    }
}

//移动
walk(){
    // console.log(this.path)
    if(this.step<this.path.length){
    this.cur=cc.tween(this.node).to(0.5/this.speed,{x:-375+(this.path[this.step][0]-1)*50,y:150-(this.path[this.step][1]-1)*50}).call(this.walk,this).start();
    this.x=this.path[this.step][0];
    this.y=this.path[this.step][1];
    this.step=this.step+1;
    }else{
        // 移动结束，清空绘制路径
        let graphcis=cc.find('Canvas/draw').getComponent(cc.Graphics);
        graphcis.clear();
        this.end_x=null;
        this.end_y=null;
    }
}


}
